home *** CD-ROM | disk | FTP | other *** search
/ Retro Gamer 15 / Retro Gamer 15.iso / MSX Emulators / blueMSXv160.exe / Contrib / cbios / src / cb_snd.a80 < prev    next >
Text File  |  2003-08-13  |  11KB  |  478 lines

  1. ;cb_snd_mode by BouKiCHi
  2. ;
  3. ; Copyright (c) 2002-2003 BouKiCHi.  All rights reserved.
  4. ;
  5. ; Redistribution and use in source and binary forms, with or without
  6. ; modification, are permitted provided that the following conditions
  7. ; are met:
  8. ; 1. Redistributions of source code must retain the above copyright
  9. ;    notice, this list of conditions and the following disclaimer.
  10. ; 2. Redistributions in binary form must reproduce the above copyright
  11. ;    notice, this list of conditions and the following disclaimer in the
  12. ;    documentation and/or other materials provided with the distribution.
  13. ;
  14. ; THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  15. ; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  16. ; OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  17. ; IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  18. ; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  19. ; NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  20. ; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  21. ; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  22. ; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  23. ; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  24. ;
  25.  
  26. ;------------------------
  27. ;âTâEâôâhâéü[âhùp
  28.  
  29. SMOD_TSTSND     equ $FAFE   ; [byte] âTâEâôâhâeâXâgùpâtâëâO
  30. SMOD_REQNUM     equ $F305   ; [byte] âèâNâGâXâgâiâôâoü[
  31. SMOD_OLDKEY     equ $F306   ; [byte] æOë±âLü[ôⁿù═
  32. SMOD_ROMSUM     equ $F307   ; [word] â`âFâbâNâTâÇ
  33. SMOD_MUSLST     equ $F309   ; [word] ï╚âèâXâgé╠âAâhâîâX
  34. SMOD_INIT       equ $F30B   ; [word] Åëè·ë╗âïü[â`âôé╠âAâhâîâX
  35. SMOD_PLAY       equ $F30D   ; [word] ì─É╢âïü[â`âôé╠âAâhâîâX(òbè╘60ë±î─é╤Åoé╡üj
  36.  
  37. ;--------------------------
  38. ;âTâEâôâhâéü[âh
  39. ;--------------------------
  40.  
  41.         org     $2000
  42.  
  43. sound_mode
  44.         di
  45.  
  46.         ld      a,$FF
  47.         ld      (PSG_DBG),a
  48.  
  49.  
  50.         call    get_slotreg
  51.         rrca
  52.         rrca
  53.         and     $03             ; A=CART ROM slot
  54.  
  55.         ld      hl,$8000
  56.         call    enaslt         ; âyü[âW1é⌐éτ2é≡òíÉ╗
  57.  
  58.         ; hooké≡ŵé┴ĵéΘüB
  59.  
  60.         ld      a,$C9
  61.         ld      (H_KEYI),a
  62.         ld      (H_TIMI),a
  63.  
  64.         call    clr_text40
  65.  
  66.         ; â[âìé≡ò\Ī
  67.  
  68.         xor     a,a
  69.         ld      de,$0000
  70.  
  71.         ld      b,$10
  72. pdsp_lp
  73.         call    disp_psg
  74.         inc     d
  75.         djnz    pdsp_lp
  76.  
  77.  
  78.         ld      hl,str_s_test
  79.         call    prn_text
  80.  
  81.         call    chk_mus_lst
  82.  
  83.         call    sndmod_play
  84.  
  85.         xor     a,a
  86.         ld      (SMOD_OLDKEY),a
  87.  
  88. ;-----------------------------
  89. ; âTâEâôâhâéü[âhâüâCâôâïü[âv
  90. snd_loop
  91.         halt
  92.         ld      hl,(SMOD_PLAY)
  93.         call    call_hl
  94.  
  95.         ld      a,$08
  96.         call    in_keyboard
  97.         ld      b,a
  98.         ld      a,(SMOD_OLDKEY)
  99.         cp      a,b
  100.         jr      z,snd_loop
  101.         ld      a,b
  102.         ld      (SMOD_OLDKEY),a
  103.  
  104.         bit     6,a
  105.         jr      z,snd_down
  106.         bit     5,a
  107.         jr      z,snd_up
  108.         bit     0,a
  109.         jp      z,debug_mode
  110.         jp      snd_loop
  111.  
  112. ;--------------------------
  113. snd_down
  114.         ld      a,(SMOD_REQNUM)
  115.         inc     a
  116.         jr      snd_set
  117. snd_up
  118.         ld      a,(SMOD_REQNUM)
  119.         dec     a
  120. snd_set
  121.         call    chk_snd_rng
  122.         ld      (SMOD_REQNUM),a
  123.         call    sndmod_play
  124.         jr      snd_loop
  125.  
  126. ;---------------------------
  127. ; âèâNâGâXâgâiâôâoü[é╠ö═ê═é≡Æ▓é╫éΘüB
  128. chk_snd_rng
  129. ; dest AF,HL,B
  130. ; ï╚âèâXâgé≡Æ▓é╫éΘüB
  131.  
  132.         ld      b,a
  133.         ld      hl,(SMOD_MUSLST)
  134.         ld      a,h
  135.         or      a,a
  136.         jr      nz,m_lst_rng
  137.         ld      a,b
  138.         ret
  139. m_lst_rng
  140.         ld      hl,(SMOD_MUSLST)
  141.         ld      a,(hl) ; A=6 A>B
  142.         cp      a,b
  143.         jr      c,m_rng_ng
  144.         ld      a,b
  145.         ret
  146. m_rng_ng
  147.         ld      a,(SMOD_REQNUM)
  148.         ret
  149.  
  150. ;----------------------
  151. chk_mus_lst
  152. ; ï╚âèâXâgé≡Æ▓é╫éΘüB
  153.  
  154.         ld      hl,(SMOD_MUSLST)
  155.         ld      a,h
  156.         or      a,a
  157.         jr      nz,m_list_fnd
  158.  
  159.         ld      a,l ; L=REQNO
  160.         ld      (SMOD_REQNUM),a
  161.         ret
  162. m_list_fnd
  163.         ld      a,$00
  164.         ld      (SMOD_REQNUM),a
  165.         ret
  166.  
  167. ;---------------------------
  168. sndmod_play
  169.  
  170.         call    sound_memclr
  171.  
  172.  
  173.         ld      hl,(SMOD_MUSLST)
  174.         ld      a,h
  175.         or      a,a
  176.         jr      z,sndmod_hex
  177.  
  178.         push    hl
  179.         pop     ix
  180.         inc     ix
  181.  
  182.         ld      a,(SMOD_REQNUM)
  183.  
  184.         ld      b,0
  185.         ld      c,a
  186.         add     ix,bc
  187.         add     ix,bc
  188.         add     ix,bc
  189.         add     ix,bc
  190.  
  191.         call    set_name_adrs
  192.  
  193.         ld      l,(ix+2)
  194.         ld      h,(ix+3)
  195.         call    prn_str_disp
  196.         ld      a,(ix)
  197.  
  198.         ld      hl,(SMOD_INIT)
  199.         call    call_hl
  200.         ret
  201.  
  202. sndmod_hex
  203.         call    set_name_adrs
  204.         ld      a,(SMOD_REQNUM)
  205.         call    vout_hex8
  206.         ld      a,(SMOD_REQNUM)
  207.  
  208.         ld      hl,(SMOD_INIT)
  209.         call    call_hl
  210.         ret
  211.  
  212. ;---------------------------
  213. call_hl
  214.         jp      (hl)
  215.  
  216. ;------------------------
  217. set_name_adrs
  218.         ld      de,120
  219.         call    de2curs
  220.         xor     a,a
  221.         ld      bc,(wrvdpa)
  222.         ld      b,40
  223. fill_rep
  224.         call    ch_put
  225.         djnz    fill_rep
  226.  
  227.         ld      de,128
  228.         call    de2curs
  229.         ret
  230.  
  231. sound_memclr
  232.         xor     a,a
  233.         ld      hl,$c000
  234.         ld      de,$c001
  235.         ld      bc,$3000
  236.         ld      (hl),a
  237.         ldir
  238.         ret
  239.  
  240. disp_psg
  241.         push    hl
  242.         push    de
  243.         push    bc
  244.         push    af
  245.  
  246.         ld      a,d
  247.         cp      a,8
  248.         jr      nc,disp_l9
  249.         ld      bc,320
  250.         jr      disp_main
  251. disp_l9
  252.         sub     a,8
  253.         ld      d,a
  254.         ld      bc,360
  255. disp_main
  256.         ld      h,0
  257.         ld      l,d
  258.  
  259.         add     hl,hl
  260.         add     hl,hl
  261.  
  262.         add     hl,bc
  263.  
  264.         ex      de,hl
  265.         call    de2curs
  266.         ex      de,hl
  267.  
  268.         ld      a,e
  269.  
  270.         call    vout_hex8
  271.  
  272.         pop     af
  273.         pop     bc
  274.         pop     de
  275.         pop     hl
  276.         ret
  277.  
  278.  
  279.  
  280. snd_romname
  281.     call    check_sum
  282.         ;DE = checksum
  283.  
  284.         push    de
  285.  
  286.         ld      hl,str_chksum
  287.         call    prn_text
  288.  
  289.         pop     ix
  290.         push    ix
  291.  
  292.         call    vout_hex16
  293.  
  294.         ld      hl,str_isgame
  295.         call    prn_str_disp
  296.  
  297.         pop     hl
  298.         ld      (SMOD_ROMSUM),hl
  299.         ld      bc,$000A     ; êΩé┬é╠ì\æóæ╠é╠âTâCâY
  300.  
  301.         ld      ix,sum_table
  302. cs_nam_loop
  303.         ld      a,(ix)
  304.         or      a,(ix+1)
  305.         jr      z,cs_nam_skip
  306.  
  307.  
  308.         ld      a,(ix)
  309.         cp      a,l
  310.         jr      nz,cs_nam_next
  311.         ld      a,(ix+1)
  312.         cp      a,h
  313.         jr      nz,cs_nam_next
  314.  
  315.         jr      cs_nam_skip
  316.  
  317. cs_nam_next
  318.         add     ix,bc
  319.         jr      cs_nam_loop
  320. cs_nam_skip
  321.  
  322.         ld      a,(ix+4)
  323.         ld      l,a
  324.         ld      a,(ix+5)
  325.         ld      h,a
  326.         ld      (SMOD_MUSLST),hl
  327.  
  328.         ld      a,(ix+6)
  329.         ld      l,a
  330.         ld      a,(ix+7)
  331.         ld      h,a
  332.         ld      (SMOD_INIT),hl
  333.  
  334.         ld      a,(ix+8)
  335.         ld      l,a
  336.         ld      a,(ix+9)
  337.         ld      h,a
  338.         ld      (SMOD_PLAY),hl
  339.  
  340.         ld      a,(ix+2)
  341.         ld      l,a
  342.         ld      a,(ix+3)
  343.         ld      h,a
  344.  
  345.         call    prn_str_disp
  346.         inc     hl
  347.         ld      a,(hl)
  348.         ld      (SMOD_TSTSND),a
  349.         ret
  350.  
  351.  
  352. ;-----------------------------
  353.  
  354. sum_table
  355.                 ;CSUM,PTR_GAMENAME,LIST_MUSIC  ,INIT ,PLAY
  356.                 ;------------------------------------------
  357.         dw      $0d0f,name_goonies,list_mus_gns,$B590,$B641
  358.         dw      $a453,name_twinscc,$0000       ,$0000,$0000
  359.         dw      $b49f,name_zanac  ,$0000       ,$0000,$0000
  360.         dw      $9ae8,name_kungfu ,$0000       ,$0000,$0000
  361.         dw      $008f,name_g1942  ,$0000       ,$0000,$0000
  362.         dw      $665a,name_pooyan ,$0000       ,$0000,$0000
  363.         dw      $0000,name_unknown,$0000       ,$0000,$0000 ; NULL
  364. name_goonies
  365.         db      "GOONIES",$0,$FF
  366. name_twinscc
  367.         db      "TWINBEE(SCC)",$0,$FF
  368. name_zanac
  369.         db      "ZANAC",$0,$0
  370. name_kungfu
  371.         db      "KUNGFU",$0,$0
  372. name_g1942
  373.         db      "1942",$0,$0
  374. name_pooyan
  375.         db      "POOYAN",$0,$0
  376. name_unknown
  377.         db      "UNKNOWN",$0,$0
  378.  
  379. list_mus_gns
  380.         ; âèâXâgé╠âTâCâY
  381.  
  382.         db      $1c
  383.         dw      $009B,gns_theme   
  384.         dw      $0091,gns_mus1   
  385.         dw      $0098,gns_mus2   
  386.         dw      $00A1,gns_mus3   
  387.         dw      $00A4,gns_mus4   
  388.         dw      $00A7,gns_mus5   
  389.         dw      $00AA,gns_mus6   
  390.         dw      $0081,gns_mus7   
  391.         dw      $0085,gns_mus8   
  392.         dw      $0089,gns_mus9   
  393.         dw      $008E,gns_mus10   
  394.         dw      $0001,gns_se1
  395.         dw      $0002,gns_se2
  396.         dw      $0003,gns_se3
  397.         dw      $0004,gns_se4
  398.         dw      $0005,gns_se5
  399.         dw      $0006,gns_se6
  400.         dw      $0007,gns_se7
  401.         dw      $0008,gns_se8
  402.         dw      $0009,gns_se9
  403.         dw      $000A,gns_se10
  404.         dw      $000B,gns_se11
  405.         dw      $000C,gns_se12
  406.         dw      $000D,gns_se13
  407.         dw      $000E,gns_se14
  408.         dw      $000F,gns_se15
  409.         dw      $0010,gns_se16
  410.         dw      $0011,gns_se17
  411.         dw      $0012,gns_se18
  412.         dw      $0000,$0000   ; NULL
  413.  
  414. gns_theme
  415.         db      "THE THEME OF GOONIES",$0
  416. gns_mus1
  417.         db      "MUSIC 1",$0
  418. gns_mus2
  419.         db      "MUSIC 2",$0
  420. gns_mus3
  421.         db      "MUSIC 3",$0
  422. gns_mus4
  423.         db      "MUSIC 4",$0
  424. gns_mus5
  425.         db      "MUSIC 5",$0
  426. gns_mus6
  427.         db      "MUSIC 6",$0
  428. gns_mus7
  429.         db      "MUSIC 7",$0
  430. gns_mus8
  431.         db      "MUSIC 8",$0
  432. gns_mus9
  433.         db      "MUSIC 9",$0
  434. gns_mus10
  435.         db      "MUSIC 10",$0
  436.  
  437.  
  438. gns_se1
  439.         db      "S.E.1",$0
  440. gns_se2
  441.         db      "S.E.2",$0
  442. gns_se3
  443.         db      "S.E.3",$0
  444. gns_se4
  445.         db      "S.E.4",$0
  446. gns_se5
  447.         db      "S.E.5",$0
  448. gns_se6
  449.         db      "S.E.6",$0
  450. gns_se7
  451.         db      "S.E.7",$0
  452. gns_se8
  453.         db      "S.E.8",$0
  454. gns_se9
  455.         db      "S.E.9",$0
  456. gns_se10
  457.         db      "S.E.10",$0
  458. gns_se11
  459.         db      "S.E.11",$0
  460. gns_se12
  461.         db      "S.E.12",$0
  462. gns_se13
  463.         db      "S.E.13",$0
  464. gns_se14
  465.         db      "S.E.14",$0
  466. gns_se15
  467.         db      "S.E.15",$0
  468. gns_se16
  469.         db      "S.E.16",$0
  470. gns_se17
  471.         db      "S.E.17",$0
  472. gns_se18
  473.         db      "S.E.18",$0
  474.  
  475. str_canstst
  476.         db      $0d,$0a
  477.         db      "SOUND TEST [F3 Key]",$00
  478.